ইউনিট টেস্টিং হলো সফটওয়্যার ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ, যা কোডের ছোট ছোট অংশ বা ইউনিটের কার্যকারিতা যাচাই করতে ব্যবহৃত হয়। সি#-এ ইউনিট টেস্টিং করার জন্য সাধারণত xUnit, NUnit, এবং MSTest ফ্রেমওয়ার্ক ব্যবহৃত হয়। ইউনিট টেস্টিং করার মাধ্যমে কোডের নির্ভুলতা নিশ্চিত করা এবং সহজে বাগ শনাক্ত করা সম্ভব হয়।
xUnit হলো C#-এ জনপ্রিয় একটি টেস্টিং ফ্রেমওয়ার্ক, যা ইউনিট টেস্ট লেখার জন্য সহজ এবং কার্যকরী। এটি Attribute-এর মাধ্যমে টেস্ট মেথডকে সনাক্ত করে।
Visual Studio তে xUnit টেস্ট প্রজেক্ট তৈরি করতে:
যদি টেস্ট প্রজেক্টে xUnit আগে থেকেই ইনস্টল না থাকে, তবে NuGet Package Manager ব্যবহার করে xUnit ইনস্টল করুন।
Install-Package xunit
Install-Package xunit.runner.visualstudio
ধরা যাক, আমাদের একটি Calculator
ক্লাস আছে যা দুটি সংখ্যা যোগ করে এবং রেজাল্ট প্রদান করে। এই মেথডের ইউনিট টেস্ট লিখবো।
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
using Xunit;
public class CalculatorTests
{
[Fact]
public void Add_ReturnsCorrectResult()
{
// Arrange
var calculator = new Calculator();
int a = 5;
int b = 3;
int expected = 8;
// Act
int result = calculator.Add(a, b);
// Assert
Assert.Equal(expected, result);
}
}
[Fact]
অ্যাট্রিবিউট[Fact]
অ্যাট্রিবিউট দিয়ে xUnit এ একটি টেস্ট মেথড চিহ্নিত করা হয়। টেস্ট মেথডে কোনো ইনপুট বা ভেরিয়েশন লাগবে না এমন ক্ষেত্রে এটি ব্যবহার করা হয়।
[Theory]
এবং [InlineData]
অ্যাট্রিবিউটযদি একই মেথডে বিভিন্ন ইনপুট দিয়ে টেস্ট চালাতে হয়, তাহলে [Theory]
এবং [InlineData]
অ্যাট্রিবিউট ব্যবহার করা হয়।
[Theory]
এবং [InlineData]
public class CalculatorTests
{
[Theory]
[InlineData(5, 3, 8)]
[InlineData(10, 20, 30)]
[InlineData(-5, -3, -8)]
public void Add_ReturnsCorrectResult(int a, int b, int expected)
{
// Arrange
var calculator = new Calculator();
// Act
int result = calculator.Add(a, b);
// Assert
Assert.Equal(expected, result);
}
}
এখানে [Theory]
এবং [InlineData]
ব্যবহার করে বিভিন্ন ইনপুট দিয়ে একাধিক টেস্ট চালানো হয়েছে।
Assert ক্লাস xUnit এ বিভিন্ন ধরনের টেস্ট ভেরিফিকেশন (যাচাই) করার জন্য মেথড সরবরাহ করে। কিছু গুরুত্বপূর্ণ Assert মেথডের উদাহরণ নিচে দেওয়া হলো:
true
কিনা যাচাই করে।false
কিনা যাচাই করে।null
কিনা যাচাই করে।null
না হলে যাচাই করে।ধরা যাক, Calculator
ক্লাসে এমন একটি মেথড আছে যা শূন্য দ্বারা ভাগ করতে গেলে একটি DivideByZeroException
থ্রো করবে।
public int Divide(int a, int b)
{
if (b == 0)
{
throw new DivideByZeroException("Cannot divide by zero.");
}
return a / b;
}
এর টেস্ট মেথডটি নিচের মতো হতে পারে:
[Fact]
public void Divide_ThrowsDivideByZeroException()
{
// Arrange
var calculator = new Calculator();
// Act & Assert
Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));
}
এখানে Assert.Throws<DivideByZeroException>
ব্যবহার করে যাচাই করা হয়েছে যে Divide
মেথডে b
এর মান 0
হলে DivideByZeroException
থ্রো হচ্ছে কিনা।
ইউনিট টেস্টিংয়ের সময় অনেক সময় নির্দিষ্ট ডিপেন্ডেন্সি বা সার্ভিসের ব্যবহার করা হয়, যেটা সরাসরি টেস্ট করা কঠিন। এক্ষেত্রে Mocking এবং Dependency Injection ব্যবহার করা হয়। Moq নামক লাইব্রেরি ব্যবহার করে মক অবজেক্ট তৈরি করা যায়।
Install-Package Moq
ধরা যাক, আমাদের EmployeeService
ক্লাসে ILogger
ইন্টারফেসের একটি ডিপেন্ডেন্সি আছে:
public class EmployeeService
{
private readonly ILogger _logger;
public EmployeeService(ILogger logger)
{
_logger = logger;
}
public string GetEmployeeName(int id)
{
_logger.Log("Fetching employee name...");
return "John Doe";
}
}
এখন ILogger
কে Mock করে টেস্ট লেখা হলো:
using Moq;
using Xunit;
public class EmployeeServiceTests
{
[Fact]
public void GetEmployeeName_LogsMessage()
{
// Arrange
var mockLogger = new Mock<ILogger>();
var service = new EmployeeService(mockLogger.Object);
// Act
string name = service.GetEmployeeName(1);
// Assert
mockLogger.Verify(logger => logger.Log("Fetching employee name..."), Times.Once);
}
}
এখানে Verify
মেথড দিয়ে যাচাই করা হয়েছে যে ILogger.Log()
একবার কল হয়েছে কিনা।
ইউনিট টেস্টিং ব্যবহার করে কোডের নির্ভুলতা যাচাই করা সহজ হয় এবং ত্রুটি দ্রুত শনাক্ত করা যায়। xUnit বা Moq-এর মত ফ্রেমওয়ার্ক ও টুল ব্যবহার করে সি# এ ইউনিট টেস্টিং আরও কার্যকর এবং সহজ হয়।
ইউনিট টেস্ট হলো এমন একটি প্রক্রিয়া যেখানে সফটওয়ারের একক ইউনিট বা ছোট অংশকে পরীক্ষা করা হয়, যাতে নিশ্চিত করা যায় যে এটি সঠিকভাবে কাজ করছে। সাধারণত, একটি ইউনিট টেস্ট একটি নির্দিষ্ট মেথড বা ফাংশনের জন্য লেখা হয় এবং এটি সেই মেথডটির প্রত্যাশিত আউটপুট প্রদান করছে কি না তা যাচাই করে। ইউনিট টেস্টিং উন্নয়ন প্রক্রিয়ার একটি গুরুত্বপূর্ণ অংশ এবং এটি স্বয়ংক্রিয় পরীক্ষার জন্য ব্যবহৃত হয়।
NUnit C# এ একটি জনপ্রিয় ইউনিট টেস্টিং ফ্রেমওয়ার্ক। এখানে একটি সাধারণ মেথডের ইউনিট টেস্ট উদাহরণ দেখানো হলো।
csharp
Copy code
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
১. Visual Studio তে NUnit প্যাকেজটি ইন্সটল করুন। Package Manager Console এ নিচের কমান্ডটি রান করুন:
Install-Package NUnit
Install-Package NUnit3TestAdapter
২. প্রজেক্টে একটি নতুন ইউনিট টেস্ট ক্লাস তৈরি করুন। CalculatorTests.cs
নামে একটি ফাইল তৈরি করুন এবং নিচের কোডটি লিখুন:
using NUnit.Framework;
[TestFixture]
public class CalculatorTests
{
[Test]
public void Add_WhenCalled_ReturnsSum()
{
// Arrange
var calculator = new Calculator();
// Act
var result = calculator.Add(2, 3);
// Assert
Assert.AreEqual(5, result);
}
}
CalculatorTests
টেস্ট ফ্রেমওয়ার্কে একটি টেস্ট ক্লাস হিসেবে ব্যবহৃত হবে।Add_WhenCalled_ReturnsSum
মেথডটি একটি টেস্ট মেথড হিসেবে চিহ্নিত হয়েছে।Visual Studio তে Test Explorer খুলুন এবং Run All
এ ক্লিক করুন। টেস্ট সফল হলে সবুজ চিহ্ন দেখাবে এবং ব্যর্থ হলে লাল চিহ্ন দেখাবে।
Add_WhenCalled_ReturnsSum
, যা স্পষ্টভাবে বলে দেয় মেথডটি কী টেস্ট করছে।ইউনিট টেস্টিং সফটওয়ারের গুণগত মান বৃদ্ধি করতে এবং উন্নয়ন প্রক্রিয়া সহজ করতে সহায়ক, যা প্রায় প্রতিটি বড় প্রজেক্টে অপরিহার্য।
সি# এ MSTest এবং NUnit হলো জনপ্রিয় টেস্ট ফ্রেমওয়ার্ক, যা ইউনিট টেস্টিংয়ের জন্য ব্যবহার করা হয়। MSTest Microsoft এর অফিসিয়াল টেস্ট ফ্রেমওয়ার্ক, আর NUnit একটি তৃতীয় পক্ষের ফ্রেমওয়ার্ক, যা শক্তিশালী ও সম্প্রসারণযোগ্য টেস্টিং ফিচার প্রদান করে।
Visual Studio তে MSTest টেস্ট প্রজেক্ট তৈরি করতে:
ধরা যাক, একটি Calculator
ক্লাস আছে, যা দুটি সংখ্যা যোগ করে এবং Add
মেথডের জন্য একটি টেস্ট লিখবো।
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
public class CalculatorTests
{
[TestMethod]
public void Add_ReturnsCorrectResult()
{
// Arrange
var calculator = new Calculator();
int a = 5;
int b = 3;
int expected = 8;
// Act
int result = calculator.Add(a, b);
// Assert
Assert.AreEqual(expected, result);
}
}
Assert.AreEqual
ব্যবহার করে প্রত্যাশিত এবং প্রাপ্ত মান যাচাই করা হয়।MSTest এ [DataTestMethod]
এবং [DataRow]
ব্যবহার করে বিভিন্ন ইনপুট দিয়ে টেস্ট চালানো যায়।
[TestClass]
public class CalculatorTests
{
[DataTestMethod]
[DataRow(5, 3, 8)]
[DataRow(10, 20, 30)]
[DataRow(-5, -3, -8)]
public void Add_ReturnsCorrectResult(int a, int b, int expected)
{
// Arrange
var calculator = new Calculator();
// Act
int result = calculator.Add(a, b);
// Assert
Assert.AreEqual(expected, result);
}
}
এখানে [DataRow]
ব্যবহার করে বিভিন্ন ইনপুট দিয়ে Add
মেথডের ফলাফল যাচাই করা হয়েছে।
Visual Studio তে NUnit টেস্ট প্রজেক্ট তৈরি করতে:
Calculator
ক্লাসের জন্য NUnit ব্যবহার করে টেস্ট লেখার উদাহরণ দেওয়া হলো।
using NUnit.Framework;
[TestFixture]
public class CalculatorTests
{
[Test]
public void Add_ReturnsCorrectResult()
{
// Arrange
var calculator = new Calculator();
int a = 5;
int b = 3;
int expected = 8;
// Act
int result = calculator.Add(a, b);
// Assert
Assert.AreEqual(expected, result);
}
}
Assert.AreEqual
ব্যবহার করে প্রত্যাশিত এবং প্রাপ্ত মান যাচাই করা হয়।NUnit এ [TestCase]
অ্যাট্রিবিউট ব্যবহার করে বিভিন্ন ইনপুট দিয়ে টেস্ট চালানো যায়।
[TestFixture]
public class CalculatorTests
{
[TestCase(5, 3, 8)]
[TestCase(10, 20, 30)]
[TestCase(-5, -3, -8)]
public void Add_ReturnsCorrectResult(int a, int b, int expected)
{
// Arrange
var calculator = new Calculator();
// Act
int result = calculator.Add(a, b);
// Assert
Assert.AreEqual(expected, result);
}
}
এখানে [TestCase]
ব্যবহার করে একাধিক ইনপুট দিয়ে Add
মেথডের জন্য টেস্ট লেখা হয়েছে।
MSTest এবং NUnit উভয় ফ্রেমওয়ার্কে Assert মেথডের মাধ্যমে টেস্ট ভ্যালিডেশন করা হয়। নিচে কিছু সাধারণ Assert মেথড দেওয়া হলো:
MSTest Assert | NUnit Assert | কাজ |
---|---|---|
Assert.AreEqual(a, b) | Assert.AreEqual(a, b) | দুই মান সমান কিনা যাচাই করা |
Assert.AreNotEqual(a, b) | Assert.AreNotEqual(a, b) | দুই মান সমান নয় কিনা যাচাই করা |
Assert.IsTrue(condition) | Assert.IsTrue(condition) | শর্তটি সত্য কিনা যাচাই করা |
Assert.IsFalse(condition) | Assert.IsFalse(condition) | শর্তটি মিথ্যা কিনা যাচাই করা |
Assert.IsNull(object) | Assert.IsNull(object) | অবজেক্টটি null কিনা যাচাই করা |
Assert.IsNotNull(object) | Assert.IsNotNull(object) | অবজেক্টটি null নয় কিনা যাচাই করা |
Assert.Throws<Exception>(Action) | Assert.Throws<Exception>(Action) | একটি নির্দিষ্ট এক্সেপশন থ্রো হচ্ছে কিনা যাচাই করা |
একটি নির্দিষ্ট এক্সেপশন থ্রো হচ্ছে কিনা যাচাই করার জন্য NUnit এ Assert.Throws<Exception>
ব্যবহার করা হয়।
[Test]
public void Divide_ThrowsDivideByZeroException()
{
// Arrange
var calculator = new Calculator();
// Act & Assert
Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));
}
এই টেস্ট যাচাই করবে যে Divide
মেথডে শূন্য দ্বারা ভাগ করলে DivideByZeroException
থ্রো হচ্ছে কিনা।
বৈশিষ্ট্য | MSTest | NUnit |
---|---|---|
টেস্ট ক্লাস চিহ্নিতকরণ | [TestClass] | [TestFixture] |
টেস্ট মেথড চিহ্নিতকরণ | [TestMethod] | [Test] |
ডেটা ড্রাইভেন টেস্ট | [DataTestMethod], [DataRow] | [TestCase] |
Exception যাচাই | Assert.Throws<Exception>(Action) | Assert.Throws<Exception>(Action) |
MSTest এবং NUnit উভয় ফ্রেমওয়ার্কই C# এ টেস্ট লেখার জন্য শক্তিশালী ও জনপ্রিয়। MSTest Microsoft এর অফিসিয়াল ফ্রেমওয়ার্ক এবং Visual Studio তে বিল্ট-ইন সাপোর্ট করে, আর NUnit অনেক বেশি সম্প্রসারণযোগ্য এবং তৃতীয় পক্ষের প্রোজেক্টে ব্যবহার করা হয়। ইউনিট টেস্টিংয়ের মাধ্যমে কোডের নির্ভুলতা যাচাই করা সহজ হয় এবং বিভিন্ন বাগ বা ত্রুটি শনাক্ত করা সম্ভব হয়।
টেস্ট কেস তৈরি করা হলো সফটওয়্যার টেস্টিংয়ের একটি গুরুত্বপূর্ণ ধাপ, যেখানে নির্দিষ্ট কিছু শর্ত, ইনপুট এবং প্রত্যাশিত ফলাফল দিয়ে ফাংশন বা মেথডের কার্যকারিতা যাচাই করা হয়। প্রতিটি টেস্ট কেস কোডের নির্দিষ্ট অংশের কার্যকারিতা নিশ্চিত করে, ফলে ত্রুটি সহজেই চিহ্নিত করা যায়।
নিচে C# এ NUnit ফ্রেমওয়ার্ক ব্যবহার করে একটি টেস্ট কেস তৈরি এবং রান করার প্রক্রিয়া ব্যাখ্যা করা হলো।
প্রত্যেক টেস্ট কেসে তিনটি ধাপ থাকে:
ধরা যাক, আমাদের একটি Calculator ক্লাস রয়েছে যেখানে Add মেথড আছে, যা দুইটি সংখ্যা যোগ করে।
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
১. Visual Studio তে NUnit প্যাকেজ ইনস্টল করুন। Package Manager Console এ নিচের কমান্ডটি রান করুন:
Install-Package NUnit
Install-Package NUnit3TestAdapter
২. CalculatorTests.cs নামে একটি নতুন টেস্ট ক্লাস তৈরি করুন এবং নিচের কোড লিখুন:
using NUnit.Framework;
[TestFixture]
public class CalculatorTests
{
private Calculator _calculator;
[SetUp]
public void Setup()
{
_calculator = new Calculator();
}
[Test]
public void Add_WhenCalled_ReturnsSum()
{
// Arrange
int a = 5;
int b = 10;
// Act
int result = _calculator.Add(a, b);
// Assert
Assert.AreEqual(15, result);
}
}
CalculatorTests
ক্লাসটিকে টেস্ট ক্লাস হিসেবে চিহ্নিত করেছে।Setup
মেথডটি প্রতিটি টেস্টের আগে রান হয়। এটি Calculator
ক্লাসের একটি ইনস্ট্যান্স তৈরি করে।Add_WhenCalled_ReturnsSum
মেথডটিকে একটি টেস্ট কেস হিসেবে চিহ্নিত করা হয়েছে।a
এবং b
নামে দুটি ভেরিয়েবল তৈরি করা হয়েছে।_calculator.Add(a, b)
এর মাধ্যমে যোগফল গণনা করা হয়েছে।Assert.AreEqual(15, result);
দিয়ে যাচাই করা হয়েছে যে যোগফল ১৫ হওয়া উচিত।Visual Studio তে Test Explorer এ যান এবং Run All
ক্লিক করুন।
ধরা যাক, Calculator
ক্লাসে একটি Subtract
মেথড আছে যা দুইটি সংখ্যা বিয়োগ করে।
public int Subtract(int a, int b)
{
return a - b;
}
Subtract মেথডের জন্য একটি নতুন টেস্ট কেস যোগ করা যেতে পারে:
[Test]
public void Subtract_WhenCalled_ReturnsDifference()
{
// Arrange
int a = 10;
int b = 5;
// Act
int result = _calculator.Subtract(a, b);
// Assert
Assert.AreEqual(5, result);
}
Subtract
মেথডে a = 10
এবং b = 5
দিয়ে বিয়োগফল হিসেবে ৫ প্রত্যাশা করা হয়েছে।এইভাবে C# এ NUnit ব্যবহার করে টেস্ট কেস তৈরি ও রান করা যায়, যা কোডের গুণগত মান এবং নির্ভরযোগ্যতা বৃদ্ধি করে।